home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 1320 / 1320.xpi / chrome / gmanager.jar / content / utils / utils.js < prev   
Text File  |  2010-01-22  |  11KB  |  334 lines

  1. // Gmail Manager
  2. // By Todd Long <longfocus@gmail.com>
  3. // http://www.longfocus.com/firefox/gmanager/
  4.  
  5. if (String.prototype.trim === undefined)
  6. {
  7.   String.prototype.trim = function()
  8.   {
  9.     return this.replace(/^\s+|\s+$/g, "");
  10.   }
  11. }
  12.  
  13. if (String.prototype.startsWith === undefined)
  14. {
  15.   String.prototype.startsWith = function(str)
  16.   {
  17.     return (this.search("^" + str) > -1);
  18.   }
  19. }
  20.  
  21. if (String.prototype.endsWith === undefined)
  22. {
  23.   String.prototype.endsWith = function(str)
  24.   {
  25.     return (this.search(str + "$") > -1);
  26.   }
  27. }
  28.  
  29. var gmanager_Utils = new function()
  30. {
  31.   this.WEBSITE = "http://www.longfocus.com/firefox/gmanager/";
  32.   
  33.   this.getBrowser = function()
  34.   {
  35.     var windowMediator = Components.classes["@mozilla.org/appshell/window-mediator;1"].getService(Components.interfaces.nsIWindowMediator);
  36.     var window = windowMediator.getMostRecentWindow("navigator:browser");
  37.     
  38.     if (window && typeof window.getBrowser == "function")
  39.       return window.getBrowser();
  40.     else if (typeof getBrowser == "function")
  41.       return getBrowser();
  42.     
  43.     return null;
  44.   }
  45.   
  46.   this.getToolbars = function()
  47.   {
  48.     var allToolbars = new Array();
  49.     var toolbarNames = new Array("statusbar", "toolbar");
  50.     
  51.     for (var i = 0; i < toolbarNames.length; i++)
  52.     {
  53.       var toolbars = this.getBrowser().ownerDocument.getElementsByTagName(toolbarNames[i]);
  54.       for (var k = 0; k < toolbars.length; k++)
  55.         allToolbars.push(toolbars[k]);
  56.     }
  57.     
  58.     return allToolbars;
  59.   }
  60.   
  61.   this.getAccountToolbars = function()
  62.   {
  63.     var accountToolbars = new Array();
  64.     var statusbarpanels = this.getBrowser().ownerDocument.getElementsByTagName("statusbarpanel");
  65.     
  66.     for (var i = 0; i < statusbarpanels.length; i++)
  67.     {
  68.       var statusbarpanel = statusbarpanels.item(i);
  69.       
  70.       if (this.isAccountToolbar(statusbarpanel))
  71.         accountToolbars.push(statusbarpanel);
  72.     }
  73.     
  74.     return accountToolbars;
  75.   }
  76.   
  77.   this.isAccountToolbar = function(aNode)
  78.   {
  79.     if (aNode && aNode.hasAttribute("id"))
  80.       return (aNode.getAttribute("id").indexOf("gmanager-toolbar-panel") == 0);
  81.     return false;
  82.   }
  83.   
  84.   this.getStoredPassword = function(aSite, aUsername)
  85.   {
  86.     var password = null;
  87.     
  88.     // Check for Toolkit 1.9 (Firefox 3)
  89.     if ("@mozilla.org/login-manager;1" in Components.classes)
  90.     {
  91.       // Load the login manager service
  92.       var loginManager = Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager);
  93.       
  94.       // Get all logins that match the site
  95.       var logins = loginManager.findLogins({}, aSite, "/", null);
  96.       
  97.       // Search for the matching login info
  98.       for (var i = 0; i < logins.length && password === null; i++)
  99.       {
  100.         if (logins[i].username == aUsername)
  101.           password = logins[i].password;
  102.       }
  103.     }
  104.     else
  105.     {
  106.       // Load the password manager service
  107.       var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"].getService(Components.interfaces.nsIPasswordManagerInternal);
  108.       
  109.       // Initialize the parameters to lookup
  110.       var hostURIFound = { value: "" };
  111.       var usernameFound = { value: "" };
  112.       var passwordFound = { value: "" };
  113.       
  114.       try {
  115.         // Lookup the password for this email
  116.         passwordManager.findPasswordEntry(aSite, aUsername, null, hostURIFound, usernameFound, passwordFound);
  117.       } catch(e) {}
  118.       
  119.       // Check if the password was found
  120.       if (passwordFound)
  121.         password = passwordFound.value;
  122.     }
  123.     
  124.     return password;
  125.   }
  126.   
  127.   this.getStoredPasswords = function()
  128.   {
  129.     var passwords = new Array();
  130.     
  131.     // Check for Toolkit 1.9 (Firefox 3)
  132.     if ("@mozilla.org/login-manager;1" in Components.classes)
  133.     {
  134.       // Get the login manager
  135.       var loginManager = Components.classes["@mozilla.org/login-manager;1"].getService(Components.interfaces.nsILoginManager);
  136.       
  137.       // Get all logins that match the hostname
  138.       var loginInfos = loginManager.findLogins({}, "https://www.google.com", "https://www.google.com", null);
  139.       
  140.       for (var i = 0; i < loginInfos.length; i++)
  141.       {
  142.         var password = new Object();
  143.         
  144.         password.user = loginInfos[i].username;
  145.         password.password = loginInfos[i].password;
  146.         
  147.         if (password.user.indexOf("@") == -1)
  148.           password.user += "@gmail.com";
  149.         
  150.         passwords.push(password);
  151.       }
  152.     }
  153.     else
  154.     {
  155.       // Get the password manager enumerator
  156.       var passwordManager = Components.classes["@mozilla.org/passwordmanager;1"].getService(Components.interfaces.nsIPasswordManager);
  157.       var passwordEnumerator = passwordManager.enumerator;
  158.       
  159.       while (passwordEnumerator.hasMoreElements())
  160.       {
  161.         var password = passwordEnumerator.getNext().QueryInterface(Components.interfaces.nsIPassword);
  162.         
  163.         if (password.host == "https://www.google.com")
  164.           passwords.push(password);
  165.       }
  166.     }
  167.     
  168.     return passwords;
  169.   }
  170.   
  171.   this.getHref = function(aNode)
  172.   {
  173.     var href = null;
  174.     var link = null;
  175.     var target = aNode;
  176.     
  177.     while (target)
  178.     {
  179.       try {
  180.         if ((target instanceof HTMLAnchorElement && target.href) ||
  181.             target instanceof HTMLAreaElement ||
  182.             target instanceof HTMLLinkElement ||
  183.             target.getAttributeNS("http://www.w3.org/1999/xlink", "type") == "simple")
  184.           link = target;
  185.       } catch(e) {}
  186.       target = target.parentNode;
  187.     }
  188.     
  189.     if (link)
  190.     {
  191.       href = link.href;
  192.       if (!href)
  193.         href = link.getAttribute("http://www.w3.org/1999/xlink", "href");
  194.     }
  195.     
  196.     return (href == null ? "" : href);
  197.   }
  198.   
  199.   this.isMailtoLink = function(aHref)
  200.   {
  201.     return (aHref ? aHref.indexOf("mailto:") == 0 : false);
  202.   }
  203.   
  204.   this.isWindow = function(aName)
  205.   {
  206.     var windowWatcher = Components.classes["@mozilla.org/embedcomp/window-watcher;1"].getService(Components.interfaces.nsIWindowWatcher);
  207.     return (windowWatcher.getWindowByName(aName, null) != null);
  208.   }
  209.   
  210.   this.toStyleStatus = function(aStatus)
  211.   {
  212.     var status = "unknown";
  213.     
  214.     switch (aStatus)
  215.     {
  216.       case Components.interfaces.gmIService.STATE_CONNECTING:
  217.         status = "connecting";
  218.         break;
  219.       case Components.interfaces.gmIService.STATE_LOGGED_OUT:
  220.         status = "logged-out";
  221.         break;
  222.       case Components.interfaces.gmIService.STATE_LOGGED_IN:
  223.         status = "logged-in";
  224.         break;
  225.       case Components.interfaces.gmIService.STATE_ERROR_PASSWORD:
  226.       case Components.interfaces.gmIService.STATE_ERROR_NETWORK:
  227.       case Components.interfaces.gmIService.STATE_ERROR_TIMEOUT:
  228.         status = "error";
  229.         break;
  230.     }
  231.     
  232.     return status;
  233.   }
  234.   
  235.   this.toUnicode = function(aString)
  236.   {
  237.     var unicodeConverter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"].createInstance(Components.interfaces.nsIScriptableUnicodeConverter);
  238.     unicodeConverter.charset = "UTF-8";
  239.     return unicodeConverter.ConvertToUnicode(aString);
  240.   }
  241.   
  242.   this.clearKids = function(aPopup)
  243.   {
  244.     if (aPopup)
  245.     {
  246.       while (aPopup.hasChildNodes())
  247.         aPopup.removeChild(aPopup.lastChild);
  248.     }
  249.   }
  250.   
  251.   this.loadSimpleURI = function(aUrl)
  252.   {
  253.     var manager = Components.classes["@longfocus.com/gmanager/manager;1"].getService(Components.interfaces.gmIManager);
  254.     this.loadURI(aUrl, gmanager_Utils.WEBSITE + manager.version + "/", null, "background");
  255.   }
  256.   
  257.   this.loadURI = function(aUrl, aReferrerUrl, aData, aLocation)
  258.   {
  259.     var mimeInputStream = Components.classes["@mozilla.org/network/mime-input-stream;1"].createInstance(Components.interfaces.nsIMIMEInputStream);
  260.     var tabbrowser = this.getBrowser();
  261.     var referrerUri = null;
  262.     
  263.     mimeInputStream.addHeader("Content-Type", "application/x-www-form-urlencoded");
  264.     
  265.     if (aReferrerUrl != undefined && typeof aData === "string")
  266.     {
  267.       var ioService = Components.classes["@mozilla.org/network/io-service;1"].createInstance(Components.interfaces.nsIIOService);
  268.       referrerUri = ioService.newURI(aReferrerUrl, null, null);
  269.     }
  270.     
  271.     if (aData != undefined && typeof aData === "string")
  272.     {
  273.       var stringInputStream = Components.classes["@mozilla.org/io/string-input-stream;1"].createInstance(Components.interfaces.nsIStringInputStream);
  274.       stringInputStream.setData(aData, aData.length);
  275.       
  276.       mimeInputStream.addContentLength = true;
  277.       mimeInputStream.setData(stringInputStream);
  278.     }
  279.     
  280.     switch (aLocation)
  281.     {
  282.       case "blank":
  283.       case "existing":
  284.       {
  285.         var host = (aLocation == "blank" ? "" : "mail.google.com");
  286.         var browsers = tabbrowser.browsers;
  287.         var thebrowser = null;
  288.         
  289.         for (var i = 0; i < browsers.length && thebrowser === null; i++)
  290.         {
  291.           var browser = browsers[i];
  292.           if (browser.currentURI.asciiHost == host)
  293.             thebrowser = browser;
  294.         }
  295.         
  296.         if (thebrowser)
  297.           thebrowser.webNavigation.loadURI(aUrl, Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE, referrerUri, mimeInputStream, null);
  298.         else
  299.           this.loadURI(aUrl, aReferrerUrl, aData, "background");
  300.         
  301.         break;
  302.       }
  303.       case "current":
  304.         tabbrowser.webNavigation.loadURI(aUrl, Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE, referrerUri, mimeInputStream, null);
  305.         break;
  306.       case "focused":
  307.         tabbrowser.selectedTab = tabbrowser.addTab();
  308.         tabbrowser.webNavigation.loadURI(aUrl, Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE, referrerUri, mimeInputStream, null);
  309.         break;
  310.       case "background":
  311.         var newTab = tabbrowser.getBrowserForTab(tabbrowser.addTab());
  312.         newTab.webNavigation.loadURI(aUrl, Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE, referrerUri, mimeInputStream, null);
  313.         break;
  314.       case "window":
  315.         window.openDialog("chrome://browser/content", "_blank", "chrome,all,dialog=no", aUrl, Components.interfaces.nsIWebNavigation.LOAD_FLAGS_NONE, referrerUri, mimeInputStream);
  316.         break;
  317.       default:
  318.         break;
  319.     }
  320.   }
  321.   
  322.   this.loadDefaultMail = function(aHref)
  323.   {
  324.     var externalProtocolService = Components.classes["@mozilla.org/uriloader/external-protocol-service;1"].getService(Components.interfaces.nsIExternalProtocolService);
  325.     
  326.     if (externalProtocolService)
  327.     {
  328.       var ioService = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService);
  329.       var uri = ioService.newURI((aHref && aHref.startsWith("mailto:") ? aHref : "mailto:"), null, null);
  330.       
  331.       externalProtocolService.loadUrl(uri);
  332.     }
  333.   }
  334. }